/**
 * bootstrap table
 */

(function ($)
{
	//全局系统对象
    window['BT'] = {};

    //填充表单数据   --by zhengtianlun 2017年6月7日
    /* 
     * 使用例子：
     * BT.loadForm({mainForm: $('#noticeForm'),    //mainForm传入对应Form的jquery对象,必填
     * 			url:'${baseURL}/gy/plan/dircoll/plannotice/gyplannoticeedit/editJSON.do',  //url:获取数据的url ，必填
     *  		datas:{id:'${id}'},   //datas:传入获取数据所需参数，必填
     *  		callback: function(data){  //callback:回调函数，用于处理特殊情况，可不填，其中参数data为url所获取的数据
     *				console.info(data);
     *			}  
     *  	});
     *  
     *  根据返回数据的属性名，找到相应name对应的表单元素，并赋值		
     **/
    BT.loadForm = function (options){
    	options = options || {};
    	var mainform;
        if (!options.mainForm){
        	mainform = $("form:first");
        }else{
        	mainform = options.mainForm;
        }
        if(!mainform) return false;
      
        $.ajax({ 
			type: "post",
			url: options.url,
			dataType : "json",
			data: options.datas,
			success: function(data){
            	if(!data) {
            		 alert('数据加载失败!');
            		 return false;
            	}
   				//如果有前缀
                var preID = options.preID || "";
                //根据返回的属性名，找到相应name对应的表单元素，并赋值
                for (var p in data)
                {
                    var ele = $("[name=" + (preID + p) + "]", mainform);
                    //针对复选框和单选框 处理
                    //checkbox 数据格式为 "value1,value2,value3"
                    if(ele.is(":checkbox")) {
                    	if(data[p] != null && data[p] != ''){
                    		//先默认初始化checkbox为空，防止默认勾选的情况
                    		var noCheckList = document.getElementsByName( preID + p );
                    		for(var j=0; j<noCheckList.length; j++){
                    			noCheckList[j].checked = false;
                    		}
                    		//再回显数据
                    		var checkboxList = data[p].toString().split(",");
                    		for(var i=0; i<checkboxList.length; i++){
                    			$("[name='" + (preID + p) + "'][value='" + checkboxList[i] + "']", mainform)[0].checked = true;
                    		}
                    	}
                    }
                    //radio 数据格式为 value
                    else if (ele.is(":radio"))
                    {
                    	$("[name='" + (preID + p) + "'][value='" + data[p] + "']", mainform).attr("checked",'checked');
                    }
                    //其他类型的元素
                    else
                    {
                        ele.val(data[p]);
                    }
                }
              
                //如果有回调函数则调用
            	if (options.callback){
             	   	options.callback(data);
            	}
			}
		 });
    };
    
    //提交表单   --by zhengtianlun 2017年6月7日
    /*
     *  使用例子：
     *  BT.submitForm($("#noticeForm"), function (data) {
      		  var win = parent || window;
              if (data && data.hasOk) {  
              	alert("success");
              } else { 
   				alert("Fail!Message:\n"+data.message+"\nContract with Manager!");
              }
            });
        
                    参数
        mainform:mainForm传入对应Form的jquery对象，必填
        success:success时的回调函数，选填
        error:系统出错时的回调函数，选填
     **/
    BT.submitForm = function (mainform, success, error)
    {
        if (!mainform)
            mainform = $("form:first");
        var validFlg = true;
        if("undefined" != typeof flowSubmitFormValid){
        	validFlg = flowSubmitFormValid;
        }
		if (validFlg) //表单验证
        {
            if (!mainform.valid()){
            	//跳转到第一个验证失败的元素 并聚焦
            	var firstError = mainform.find("input.error")[0];
            	var _body = mainform.parents(".modal.in");
            	var _top = $(firstError).position().top;
            	if(_top == 0){ //时间控件获取不到位置，暂取父节点td的位置
            		_top = $(firstError).parents("td").position().top;
            	}
            	if(_body && _body.length>0){ //弹框
            		mainform.parents(".modal.in").animate({scrollTop:_top + 50},500);
            	}else{//其他
            		mainform.parents("body").animate({scrollTop:_top - 80},500);
            	}
            	if($(firstError).position().top != 0){ //若是时间控件则不聚焦
            		$(firstError).focus();
            	}
            	return false;
            }
        }
        
        mainform.ajaxSubmit({
            dataType: 'json',
            type:"post",
            success:success,
            /*
             * formData:数组形式的表单数据
             * jqForm:jQuery表单对象
             * options:传入ajaxForm/ajaxSubmit中的Options对象
             **/
            beforeSubmit: function (formData, jqForm, options)
            {
            	var tempData = [];       //把除了CheckBox和radio的数据都放进去,再补上整理过的CheckBox和radio的
            	var checkboxAndRadio = []; //记录CheckBox和radio
                //针对复选框和单选框 处理
                //把复选框和单选框放到checkboxAndRadio（同名只需放一个，后面通过名字获取），其余元素放到tempData
                for(var i=0; i<formData.length; i++){
                	if(formData[i].type == "checkbox" || formData[i].type == "radio"){
                		if (!existInName(checkboxAndRadio, formData[i].name)){
                        	checkboxAndRadio.push(formData[i]);
                        } 
                	}else{
                		tempData.push(formData[i]);
                	}
                }
            	//处理复选框和单选框放的value值，CheckBox的值形式为 "value1,value2,value3"
            	for(var i=0; i<checkboxAndRadio.length; i++){
            		var ele = checkboxAndRadio[i]; 					//CheckBox和radio元素
            		var eles = document.getElementsByName(ele.name);	//元素集合，通过name获取
           			var val = "";									//最终元素值
            		for(var j=0; j<eles.length; j++){   //拼接元素值
            			if(eles[j].checked == true){
            				val = val + eles[j].value + ",";
            			}
            		}
            		if(val != ""){
            			val = val.substring(0,val.length-1);
            		}
            		tempData.push({ name: ele.name, type: "text", value: val });
            	}
            	//先删除全部
            	formData.splice(0,formData.length);
            	//再逐条加入
            	for(var i=0; i<tempData.length; i++){
            		formData.push(tempData[i]);
            	} 
            },
            beforeSend: function (a, b, c){
            	loader.open($('body'));
            },
            complete: function (){
            	loader.close($('body'));
            }
        });
        
        //验证是否已存在同名元素
        function existInName(checkboxAndRadio, name)
        {  
            for (var i = 0; i < checkboxAndRadio.length; i++)
            {
                if (checkboxAndRadio[i].name == name) return true;
            }
            return false;
        }
    };
	
    
    //创建过滤规则数据(查询表单)   --by zhengtianlun 2017年6月7日
    /* 
     * 使用例子：
     * var json = BT.buildFilterParams($("#formsearch"));
		$("#tb_directoryCollectMake").bootstrapTable("refresh",{query: json});
     *
     *	参数
     *	form: 传入对应搜索form的jquery对象，必填
     **/
	BT.buildFilterParams = function(form){
		if (!form) return null;
		var params = new Map();
        $("input", form).not(":submit, :reset, :image,:button, [disabled]").each(function ()
        {
            if (!this.name) return;
            if ($(this).val() == null || $(this).val() == "") return;
            if (this.type == "radio" && this.checked == false) return;
            var value = $(this).val();
            var name = this.name;
            //checkbox 存放数组
            if (this.type == "checkbox") {
            	//同名checkbox只需放一个，包含所有已选择的
            	if(this.checked == false  || params.get(name) != null){
            		return; 
            	}else{
            		var checkValue = [];
            		var checkboxes = document.getElementsByName(name);
            		for(var i=0; i<checkboxes.length; i++){
            			if(checkboxes[i].checked == true){
            				checkValue.push(checkboxes[i].value);
            			}
            		}
            		params.put(name,checkValue);
            		return;
            	}
            }
            params.put(name,value);
        });
        //select
        $("select", form).each(function(){
        	 if (!this.name) return;
             if ($(this).val() == null || $(this).val() == "") return;
        	 var value = $(this).val();
             var name = this.name;
             params.put(name,value);
        });
        return params.toJson();
	};
	
	 /*
	  * 成功提示窗口
	  * message:提示信息（必需）
	  * callback:回调函数(可选)
	  * hiding:模态框遮罩层隐藏时事件(可选)
	  */
	BT.showSuccess = function(message,callback,hiding){
        // successIcon 在tablibs.inc中定义
		var icon = typeof successIcon === 'string' ? successIcon : 'fa fa-check-circle text-blue'
		BootstrapDialog.show({
			type: BootstrapDialog.TYPE_DEFAULT,
			size: BootstrapDialog.SIZE_SMALL,
			title: '',
			//closable: false, //模态框点击不隐藏
			message: '<p><i class="' + icon + '"></i></p><h4>'+message+'</h4>',
			onhide: function(dialogItself){
		        if(hiding){
		        	hiding();
		        } else if (callback) {
		        	callback();
		        }
		    },
			buttons: [{
			    label: '确定',
			    hotkey: 13, //绑定热键enter
			    action: function(dialogItself){
			        dialogItself.close();
			        /*if(callback){
			        	callback();
			        }*/
			    }
			}]
		});
		setTimeout(function(){$("#ok").click()},3000);
	};
	 /*
	  * 警告提示窗口
	  * message:提示信息（必需）
	  * callback:回调函数(可选)
	  * hiding：模态框遮罩层隐藏时事件(可选)
	  */
	BT.showWarning = function(message,callback,hiding,time){
        // warningIcon 在 taglibs.inc 中定义
        var icon = typeof warningIcon === 'string' ? warningIcon : 'fa fa-close text-red';
		BootstrapDialog.show({
			type: BootstrapDialog.TYPE_DEFAULT,
			size: BootstrapDialog.SIZE_SMALL,
			title: '',
			//closable: false, //模态框点击不隐藏
			message: '<p><i class="' + icon + '"></i></p><h4>'+message+'</h4>',
			onhide: function(dialogItself){
		        if(hiding){
		        	hiding();
		        }
		    },
			buttons: [{
			    label: '确定',
			    hotkey: 13, //绑定热键enter
			    action: function(dialogItself){
			        dialogItself.close();
			        if(callback){
			        	callback();
			        }
			    }
			}]
		});
		if(time){
			setTimeout(function(){$("#ok").click()},time);
		}
	};
	/*
	  * 警告提示窗口(用于展示多条信息时)
	  * message:提示信息（必需）
	  * callback:回调函数(可选)
	  * hiding：模态框遮罩层隐藏时事件(可选)
	  */
	BT.showWarningMore = function(message,callback,hiding,time){
		BootstrapDialog.show({
			type: BootstrapDialog.TYPE_DEFAULT,
			size: BootstrapDialog.SIZE_SMALL,
			title: '',
			//closable: false, //模态框点击不隐藏
			message: '<p><i class="fa fa-info-circle text-orange"></i></p><p class="text-left">'+message+'</p>',
			onhide: function(dialogItself){
		        if(hiding){
		        	hiding();
		        }
		    },
			buttons: [{
			    label: '确定',
			    hotkey: 13, //绑定热键enter
			    action: function(dialogItself){
			        dialogItself.close();
			        if(callback){
			        	callback();
			        }
			    }
			}]
		});
		if(time){
			setTimeout(function(){$("#ok").click()},time);
		}
	};
	 /*
	  * 错误提示窗口
	  * message:提示信息（必需）
	  * callback:回调函数(可选)
	  * hiding:模态框遮罩层隐藏时事件(可选)
	  */
	BT.showError = function(message,callback,hiding){
        // errorIcon 在 taglibs.inc 中定义
        var icon = typeof errorIcon === 'string' ? errorIcon : 'fa fa-close text-red'
		BootstrapDialog.show({
			type: BootstrapDialog.TYPE_DEFAULT,
			size: BootstrapDialog.SIZE_SMALL,
			title: '',
			//closable: false, //模态框点击不隐藏
			message: '<p><i class="' + icon + '"></i></p><h4>'+message+'</h4>',
			onhide: function(dialogItself){
		        if(hiding){
		        	hiding();
		        }
		    },
			buttons: [{
			    label: '确定',
			    hotkey: 13, //绑定热键enter
			    action: function(dialogItself){
			        dialogItself.close();
			        if(callback){
			        	callback();
			        }
			    }
			}]
		});
	};
	
	/*
	 * 确认信息提示框
	 * title:标题
	 * message:提示信息
	 * callback:回调函数
	 */
	BT.showConfirm = function(title,message,callback){
		BootstrapDialog.confirm({
		    title: '',
		    message: '<h4 class="subTitle">'+title+'</h4><p>'+message+'</p>',
			type: BootstrapDialog.TYPE_DEFAULT,
			size: BootstrapDialog.SIZE_SMALL,
		    closable: true, 
		    draggable: true,  
		    btnOKLabel: '确定', // <-- Default value is 'OK',
		    btnCancelLabel: '取消', // <-- Default value is 'Cancel',
		    btnOKClass: 'btn-blue', // <-- If you didn't specify it, dialog type will be used,
		    callback: function(result) {
		        // result will be true if button was click, while it will be false if users close the dialog directly.
		        if(result) { //确定
		           if(callback){
		        	   callback();
		        	}
		        }
		    }
		});
	}

	/*
	 * 快速设置表单默认的按钮:保存、取消
	 * cancleCallback:关闭按钮对应触发的方法
	 * savedCallback :保存按钮对应触发的方法
	 * 示例:BT.setFormDefaultBtn(FF_Cancel, FF_Save);
 	 */
    BT.setFormDefaultBtn = function (cancleCallback, savedCallback)
    {
        //表单底部按钮
        var buttons = [];
       
        if (savedCallback)
        {
            buttons.push({ text: '保存', onclick: savedCallback , className:'btn-blue'  });
        }
        
        if (cancleCallback)
        {
            buttons.push({ text: '取消', onclick: cancleCallback , className:'btn-white' });
        }
        BT.addFormButtons(buttons);
    };

     /*
	 * 设置表单的按钮
	 * buttons:button对象数组
	 * 示例: BT.addFormButtons(
	 * [{ text: '取消', onclick: cancleCallback , className:'btn-orange'},
	 *  { text: '保存', onclick: savedCallback , className:'btn-blue'}]);
 	 */
    BT.addFormButtons = function (buttons)
    {
        if (!buttons) return;
        var formbar = $("div.FrameWindow > .window-menu > div.menuInner");
         if (formbar.length == 0){
        	formbar = $('div.FrameWindow').prepend('<div class="window-menu"><div class="menuInner"></div></div>');
        }
        if (!(buttons instanceof Array))
        {
            buttons = [buttons];
        }
        $(buttons).each(function (i, o)
        {
             var btn = $('<button type="button" class="btn btn-normal '+o.className+'">'+(o.text || 'BUTTON')+'</button>');
            if (o.onclick)
            {
                btn.bind('click', function ()
                {
                    o.onclick(o);
                });
            }
            if (o.width)
            {
                btn.width(o.width);
            }
              $(formbar).append(btn);
        });
    };
    
    BT.addPreFormButtons = function (buttons)
    {
        if (!buttons) return;
        var formbar = $("div.FrameWindow > .window-menu > div.menuInner");
         if (formbar.length == 0){
        	formbar = $('div.FrameWindow').prepend('<div class="window-menu"><div class="menuInner"></div></div>');
        }
        if (!(buttons instanceof Array))
        {
            buttons = [buttons];
        }
        $(buttons).each(function (i, o)
        {
             var btn = $('<button type="button" class="btn btn-normal '+o.className+'">'+(o.text || 'BUTTON')+'</button>');
            if (o.onclick)
            {
                btn.bind('click', function ()
                {
                    o.onclick(o);
                });
            }
            if (o.width)
            {
                btn.width(o.width);
            }
              $(formbar).prepend(btn);
        });
    };
    
    BT.serialIdParam = function (datas,split){
		if(!datas || !datas.length || datas.length == 0) return "";
		var ids = [];
		for(var i = 0; i < datas.length; i++){
			var a = datas[i];
			if(a.id && a.id.length > 0){
				ids.push(a.id);
			}
		}
		if(split != undefined)
			return ids.join(split);
		return ids.join(";");
	};
})(jQuery);

/**
 * 下载附件判断附件是否存在，存在就进行下载，不存在就弹出提示框
 * @param attachId
 * @returns
 */
function downLoad(attachId){
	$.ajax({
		type : "POST",
		url : baseURL + "/attach/action/attachsupport/attachIsExist.do" ,
		data : "attachId=" + attachId,
		async : false ,
		success : function(data) {
			console.log(data);
			if (data && data.hasOk == true) {
				location.href =  baseURL + "/attach/action/attachsupport/downloadAttach.do?rand=" + Math.random() + "&attachId=" + attachId;
			}else{
				BT.showWarning("该附件不存在，无法下载");
			} 
		}
	});
}

/*
 * 打开或下载文件
 * 
 * @param attachId 			附件id
 * 
 * @param openFileType 		直接打开的文件类型，该参数是一个字符串，
 * 					   		包含直接打开的附件的扩展名，如果参数不传，则使用
 * 							.jpg,.png,.jpeg,.gif,.pdf 等默认值
 */
function openOrDownload(attachId, openFileType) {
	typeof openFileType != 'undefined' &&  openFileType 
	if (typeof openFileType === 'undefined' || openFileType === null) {
		var openFileType = '.jpg,.png,.jpeg,.gif,.pdf'
	}
	$.ajax({
		type : "POST",
		url : baseURL + "/common/attach/attachlist/attachIsExist.do",
		data : "attachId=" + attachId,
		async : false ,
		success : function(data) {
			if (data && data.hasOk == true) {
				var extendName = data.bean.extendName;
				if (typeof extendName === 'string' && extendName !== ''
						&& openFileType.indexOf(extendName.toLocaleLowerCase()) !== -1) {
					WinPrint2(baseURL + '/common/attach/attachlist/openAttach.do?rand='+ Math.random() + '&attachId=' + attachId);
				} else {
					BT.showWarning('抱歉，无法直接打开，点击确定将为您下载', function(){
						location.href =  baseURL + "/common/attach/attachlist/downloadAttach.do?rand=" + Math.random() + "&attachId=" + attachId;
					});
				}
				
			}else{
				BT.showWarning("该附件不存在，无法下载");
			} 
		}
	});
}

/**
 * 判断当前浏览器版本
 */
BrowerVersion = {
	getVersion: function(){
		if (/Chrome\/(\d+)\./.test(navigator.userAgent)) {
			return {'brower': 'Chrome', 'version': RegExp.$1}
		}
		else if (/Firefox\/(\d+)\./.test(navigator.userAgent)) {
			return {'brower': 'Firefox', 'version': RegExp.$1}
		}
		else if (/Trident\/7.*rv:(\d+)\./.test(navigator.userAgent)) {
			return {'brower': 'IE', 'version': RegExp.$1}
		}
		else if (/MSIE\s(\d+)\./	.test(navigator.userAgent))	 {
			return {'brower': 'IE', 'version': RegExp.$1}
		}
	},
	/*
	 *	mode：eq 等于，gt 大于，ge 大于等于，lt 小于， le 小于等于
	 *  brower：chrome，firefox，ie
	 *  version：版本
	 */
	compare: function(mode, brower, version) {
		var bv = this.getVersion()
		if (!bv || typeof brower != 'string') {
			return false
		}
		brower = brower.toLowerCase()
		var b = bv.brower.toLowerCase()
		var v = parseInt(bv.version)
		switch (mode) {
			case 'eq':
				return b == brower && (version ? v == version : true)
			case 'gt':
				return b == brower && v > version 
			case 'ge':
				return b == brower && v >= version
			case 'lt':
				return b == brower && v < version
			case 'le':
				return b == brower && v <= version 
			default:
				return false
		}
	}
}

/**
 * 判断是否是IE浏览器
 */
function isIE(){
	var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串  
    return userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器  
}

function isIE8(){
	var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串  
	var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("MSIE") > -1; //判断是否IE<11浏览器  
	var isEdge = userAgent.indexOf("Edge") > -1 && !isIE; //判断是否IE的Edge浏览器  
	var isIE11 = userAgent.indexOf('Trident') > -1 && userAgent.indexOf("rv:11.0") > -1;
	if(isIE) {
	    var reIE = new RegExp("MSIE (\\d+\\.\\d+);");
	    reIE.test(userAgent);
	    var fIEVersion = parseFloat(RegExp["$1"]);
	    return fIEVersion == 7 || fIEVersion == 8;
	}
}